#!/bin/bash
# tomcat 快捷docker安装运行
# 创建目录并移动脚本的函数
function createStart() {
    local dockerVolumes="$1"
    local name="$2"
    local scriptName="${name}.sh"
    local destination="/${dockerVolumes}/${name}"
    rm -rf "${destination}"
    # 为脚本添加执行权限
    chmod +x "${scriptName}"

    # 使用 mkdir -p 创建父目录（如果不存在）
    mkdir -p "${destination}"

    # 删除已存在的脚本文件
    [ -f "${destination}/${scriptName}" ] && rm -rf "${destination}/${scriptName}"

    # 在移动之前检查脚本文件是否存在
    if [ -f "${scriptName}" ]; then
        cp "${scriptName}" "${destination}/"
        echo "脚本 '${scriptName}' 已复制到 '${destination}/'"
    else
        echo "错误：当前目录中找不到脚本 '${scriptName}'"
        exit 1
    fi
}

function dockerCreateStart() {
     name="$1"
     version="$2"
     asName="$3"
     portMap=$4
     volumesMap=$5
     dockerMap=$6
     copyDockerMap=$7

    # 取消注释以下一行，如果想要拉取 Docker 镜像
    #docker pull "${name}:${version}"

    # 删除同名容器
    docker rm -f "${asName}" &>/dev/null

    dockerRun="docker run"
    dockerRunTemp="docker run"

    # 添加端口映射参数
    for element in "${portMap[@]}"; do
        dockerRun+=" -p $element"
        dockerRunTemp+=" -p $element"
    done

    # 添加卷映射参数
    for element in "${volumesMap[@]}"; do
        dockerRun+=" -v $element"
        # dockerRunTemp+=" -v $element"
    done

    # 添加其他 Docker 参数
    for element in "${dockerMap[@]}"; do
        dockerRun+=" $element"
        dockerRunTemp+=" $element"
    done

 

    $dockerRunTemp "${name}:${version}"

    if [[ "${name}" == "tomcat" && "${version}" == "9.0" ]]; then
        echo "${name}:${version} 拷贝处理"
        docker exec -it "${asName}" /bin/bash -c "cp -r webapps.dist/* webapps && exit"
        docker restart "${asName}"
    fi


    echo "复制 开始"
       # 复制 Docker 映射文件
    for element in "${copyDockerMap[@]}"; do
        echo "复制 $element"
        IFS=':' read -r source dest <<< "$element"
        echo "docker cp ${asName}:${source} ${dest}"
        docker cp "${asName}":"${source}" "${dest}"
    done

    echo "复制 完成"
      # 删除同名容器
    docker rm -f "${asName}" &>/dev/null
    echo "正式启动挂载"
    echo "$dockerRun ${name}:${version}"
    $dockerRun "${name}:${version}"

    #read -r -p "查看 $name 运行日志?【Y/N】" input
    #if[ "$input,," =~ ^(YES|Y)$ ];then
    #    docker logs -f -t ${asName}
    #else
    #    echo ""
    #fi

}
function main(){
    # 默认值
    networkName="common-network"
    dockerVolumes="docker-volumes"
    #镜像名
    name="tomcat"
    #别名
    asName="tomcat"
    #版本
    version="9.0"
    portMap=("8080:8080")
    #挂载地址
    v0="/etc/localtime:/etc/localtime"
    v1="/${dockerVolumes}/${name}:/usr/local/tomcat"
    volumesMap=("$v0" "$v1" )

    #环境配置
    dockerMap=("--restart=always" "-d" "--name=${asName}" "--network=${networkName}")
    #容器地址:宿主机地址
    cp1="/usr/local/tomcat:/$dockerVolumes"
    copyDockerMap=("$cp1")

    # 输出关于设置的信息
    echo "============================================="
    echo "        ${name} Docker 安装挂载启动          "
    echo "============================================="
    docker network create "$networkName"
    # 使用 createStart 函数创建挂载目录
    echo "创建挂载目录..."
    createStart "${dockerVolumes}" "${name}"

    # 使用 dockerCreateStart 函数运行 Docker 容器
    dockerCreateStart "${name}" "${version}" "${asName}" $portMap $volumesMap $dockerMap $copyDockerMap

    echo "============================================="
    echo "        ${name} Docker 安装挂载启动成功         "
    echo "============================================="
    for element in "${volumesMap[@]}"; do
    echo "        ${asName} Docker 挂载目录：            "
        echo ${element}
    done
    echo "============================================="
}
main